
package modelo.entidad;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;

import org.hibernate.annotations.IndexColumn;

@Entity
@Table(name="usuario",schema="public")
@PrimaryKeyJoinColumn(name="email")
public class Usuario implements Serializable {

	private static final long serialVersionUID = 1L;
	

	@SequenceGenerator(name="SeqId", sequenceName="public.usuario_id_seq", allocationSize=1)	
	@GeneratedValue(generator="SeqId")
	private int id;
	@Column(nullable=false, name="cedula")
	private String cedula;
	@Column(nullable=false, name="nombre")
	private String nombre;
	@Column(nullable=false, name="apellido")
	private String apellido;
	@Column(nullable=false, name="telefono")	
	private String telefono;
	@ManyToOne
	@JoinColumn (name="id_tipousuario")
	private TipoUsuario tipo_usuario;
	@Id    
	@Column(nullable=false, name="email")	
	private String email;
	@Column(nullable=false, name="contrasena")
	private String contrasena;
	@Column(nullable=false, name="estatus")	
	private String estatus;
	@Transient	
	private boolean editingStatus=false;
	
    @OneToMany(cascade= CascadeType.ALL, fetch=FetchType.EAGER)
    @JoinColumn(name="emailusuario")
    @IndexColumn(name="idxx")
	private List<Publicacion> publicaciones;

	public Usuario(int id, String cedula, String nombre,
			String apellido, String telefono, TipoUsuario tip,
			String email, String contrasena, String estatus) {
		super();
		this.id = id;
		this.cedula = cedula;
		this.nombre = nombre;
		this.apellido = apellido;
		this.telefono = telefono;
		this.tipo_usuario = tip;
		this.email = email;
		this.contrasena = contrasena;
		this.estatus = estatus;
	}

	public Usuario() {
		super();
		editingStatus=false;
	}

	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	
	public String getCedula() {
		return cedula;
	}

	public void setCedula(String cedula) {
		this.cedula = cedula;
	}

	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	
	public String getApellido() {
		return apellido;
	}

	public void setApellido(String apellido) {
		this.apellido = apellido;
	}


	public String getTelefono() {
		return telefono;
	}

	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	



	public TipoUsuario getTipo_usuario() {
		return tipo_usuario;
	}

	public void setTipo_usuario(TipoUsuario tipo_usuario) {
		this.tipo_usuario = tipo_usuario;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	
	public String getContrasena() {
		return contrasena;
	}

	public void setContrasena(String contrasena) {
		this.contrasena = contrasena;
	}


	public String getEstatus() {
		return estatus;
	}

	public void setEstatus(String estatus) {
		this.estatus = estatus;
	}


	public boolean isEditingStatus() {
		return editingStatus;
	}

	public void setEditingStatus(boolean editingStatus) {
		this.editingStatus = editingStatus;
	}

	public List<Publicacion> getPublicaciones() {
		return publicaciones;
	}

	public void setPublicaciones(List<Publicacion> publicaciones) {
		this.publicaciones = publicaciones;
	}
	
	
	
	
}
